package com.atguigu.spring;

import com.atguigu.spring.aop.xml.Calculator;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * 前置通知：使用@Before注解标识，在被代理的目标方法前执行
 * 返回通知：使用@AfterReturning注解标识，在被代理的目标方法成功结束后执行（寿终正寝）
 * 异常通知：使用@AfterThrowing注解标识，在被代理的目标方法异常结束后执行（死于非命）
 * 后置通知：使用@After注解标识，在被代理的目标方法最终结束后执行（盖棺定论）
 * 环绕通知：使用@Around注解标识，使用try...catch...finally结构围绕整个被代理的目标方法，包
 * 括上面四种通知对应的所有位置
 * 各种通知的执行顺序：
 * Spring版本5.3.x以前：
 * 前置通知
 * 目标操作
 * 后置通知
 * 返回通知或异常通知
 * Spring版本5.3.x以后：
 * 前置通知
 * 目标操作
 * 返回通知或异常通知
 * 后置通知
 */
public class testAOPByXML {
    @Test
    public void testAOPXML(){
        ApplicationContext ioc=new ClassPathXmlApplicationContext("aop-xml.xml");
        Calculator bean = ioc.getBean(Calculator.class);
        bean.div(3,1);
    }
}
